#pragma comment(linker,"/STACK:100000000")
#include "testlib.h"
#include <stdio.h>
#define N 501
struct P
{
	long long x, y;
	P(long long x=0, long long y=0): x(x), y(y) {}
};
P operator +(P a, P b) { return P(a.x+b.x, a.y+b.y); }
P operator -(P a, P b) { return P(a.x-b.x, a.y-b.y); }
P operator *(P a, long long b) { return P(a.x*b, a.y*b); }
long long operator &(P a, P b) { return a.x*b.x+a.y*b.y; }
long long operator *(P a, P b) { return a.x*b.y-a.y*b.x; }
bool operator ==(P a, P b) { return a.x==b.x && a.y==b.y; }
P m[N][4];
bool is(P a, P b, P c, P d)
{
	long long d0, d1, d2;
	d0=(b-a)*(d-c);
	if(d0) return 1;
	d1=(c-a)*(d-c);
	d2=(c-a)*(b-a);
	if(d1 || d2) return 1;
	return ((c-a)&(c-b))>=0 && ((d-a)&(d-b))>=0 && ((a-c)&(a-d))>=0 && ((b-c)&(b-d))>=0;
}
int main()
{
	registerValidation();
	int n, i, j, k, l;
	n=inf.readInt(1, 500, "n"); inf.readEoln();
	for(i=0; i<n; m[i][3]=m[i][0], i++)
		for(j=0; j<3; j++)
		{
			m[i][j].x=inf.readInt(-1000, 1000, "x_i"); inf.readSpace();
			m[i][j].y=inf.readInt(-1000, 1000, "y_i");
			if(j<2) inf.readSpace();
			else inf.readEoln();
		}
	inf.readEof();
	for(i=0; i<n; i++)
		ensuref((m[i][2]-m[i][0])*(m[i][1]-m[i][0])!=0, "%d-th triangle is degenerate", i+1);
	for(i=0; i<n; i++)
		for(j=i+1; j<n; j++)
			for(k=0; k<3; k++)
				for(l=0; l<3; l++)
					ensuref(is(m[i][k], m[i][k+1], m[j][l], m[j][l+1]), "%d-th and %d-th triangles touch each other", i+1, j+1);
	return 0;
}